#ifndef __GPIO_INIT_H__
#define __GPIO_INIT_H__

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>

struct gpio_desc
{
	unsigned int group;
	unsigned int num[16];
};
struct gpio_desc gpio_val[6];

static void gpio_init(void) // gpio引脚初始化
{
	int i, j;
	for (i = 0; i < 6; i++)
	{
		gpio_val[i].group = i;
		for (j = 0; j < 16; j++)
		{
			gpio_val[i].num[j] = 496 - 16 * i + j;
		}
	}
}

// 根据组号和组内编号获取数字
static unsigned int gpio_get(struct gpio_desc gpios)
{
	return gpio_val[gpios.group].num[gpios.num[0]];
}

// 根据用户自己的需求配置节点文件下的属性文件
static int gpio_write(char *pptr, char *attr, char *val)
{
	int fd, len;
	char file_path[256];
	// file_path: /sys/class/gpio/gpio497/attr(direction/edge...)
	sprintf(file_path, "%s/%s", pptr, attr);
	if (0 > (fd = open(file_path, O_WRONLY)))
	{
		perror("open file_path error!");
		return -1;
	}
	len = strlen(val);
	if (len != write(fd, val, len))
	{
		perror("write val error!");
		close(fd);
		return -1;
	}
	close(fd);
	return 0;
}

#endif